<?php
require_once(MODULESPATH . "core/b.object.class.php");
require_once(MODULESPATH . "finance/business/b.finance.inc.php");

/**
 * 财经系统领域模型类。
 */
class BFinance extends BObject implements IBFinance{
    /**
     * 财经系统数据访问对象。
     */
    private $dao = null;
    
    /**
     * 账号用户领域模型。
     */
    private $user = null;
    
    /**
     * 投资组合领域模型。
     */
    private $combination = null;
    
    /**
     * 投资领域模型。
     */
    private $investment = null;
    
    /*- IBFinance 接口实现 START -*/
    /*- IInjectEnable 接口实现 START -*/
    /**
     * 设置属性值。
     */
    public function __set($prop, $val){
        $this->$prop = $val;
    }
    /*- IInjectEnable 接口实现 END -*/
    
    /**
     * 向投资组合中添加证券。
     * @param String $symbol 证券代码。
     * @param Int $combinationId 投资组合ID。
     * @return Int 投资组合ID。
     */
    public function addStock($symbol, $combinationId = -1){
        $uid = $this->user->getCurrentUserId();
        if($uid > 0){
            if($combinationId < 0){
                $combinationId = $this->combination->getUserDefaultCombinationId($uid);
            }
            if($combinationId > 0){
                $this->combination->addStock($symbol, $combinationId, $uid);
            }
        }
        return $combinationId;
    }
    
    /**
     * 添加证券交易数据。
     * @param String $symbol 证券代码。
     * @param Int $combinationId 投资组合ID。
     * @param Int $type 交易类型。
     * @param Int $date 交易日期。
     * @param Int $quantity 证券数量。
     * @param Int $cost 证券总成本。
     * @param String $note 交易手记。
     */
    public function addInvestment($symbol, $combinationId, $type, $date, $quantity, $cost, $note){
        $uid = $this->user->getCurrentUserId();
        if(($uid > 0) && ($combinationId > 0)){
            $this->investment->addInvestment($symbol, $combinationId, $uid, $type, $date, $quantity, $cost, $note);
        }
    }
    
    /**
     * 获取用户的投资组合列表。
     * @return 用户的投资组合列表。
     */
    public function getUserCombinations(){
        $result = array();
        $uid = $this->user->getCurrentUserId();
        if($uid > 0){
              $result = $this->combination->getUserCombinations($uid);
        }
        return $result;
    }
    
    /**
     * 获取证券类型的列表。
     */
    public function getStockTypes(){
        return $this->getDataList("global_stock_types", "getStockTypes");
    }
    
    /**
     * 获取证券市场的列表。
     */
    public function getStockMarkets(){
        return $this->getDataList("global_stock_markets", "getStockMarkets");
    }
    
    /**
     * 获取证券交易类型的列表。
     */
    public function getInvestmentTypes(){
        return $this->getDataList("global_investment_types", "getInvestmentTypes");
    }
    /*- IBFinance 接口实现 END -*/
    
    /*- 私有方法 START -*/
    /**
     * 获取财经系统的字典类列表。
     * @param String $key 缓存的键。
     * @param String $method 数据访问对象的方法。
     * @return 财经系统的字典类列表。
     */
    private function getDataList($key, $method){
        $result = array();
        $result = $this->cache->get($key);
        if($result == null){
            $result = $this->dao->$method();
            $this->cache->add($key, $result);
        }
        return $result;
    }
    /*- 私有方法 END -*/
}
?>
